﻿#pragma once

#include "topo_base.h"

namespace CAGD
{

/**
 * 拓扑面.
 */
class TopoFace : public TopoBase
{
  public:
    /**
     * @brief 空构造（用于 Mesh）.
     * @see
     */
    TopoFace();

    /**
     * @brief 曲面构造.
     * @param surface
     * @see
     */
    TopoFace(Handle(GeomSurface) surface);

    /**
     * @brief 析构.
     * @see
     */
    ~TopoFace();

    /**
     * @brief 返回曲面.
     * @return
     * @see
     */
    Handle(GeomSurface) Geom() const;

    /**
     * @brief 所属 shell.
     * @return
     * @see
     */
    TopoShell *&Shell();

    /**
     * @brief 第一条 loop.
     * @return
     * @see
     */
    TopoLoop *&Loop();

    /**
     * @brief 拓扑类型.
     * @return
     * @see
     */
    TopoType Type() const override;

  protected:
    Handle(GeomSurface) m_surface; // 几何曲面
    TopoShell *m_shell;            // 所属 shell
    TopoLoop *m_loop;              // 面上的第一条 loop，即最初的逆时针内环，通过链表形式连接
};

} // namespace CAGD
